//
// Created by francklinson on 2021/7/25 AT 23:38.
//

//给定两个字符串 s 和 t，它们只包含小写字母。
//
//字符串 t 由字符串 s 随机重排，然后在随机位置添加一个字母。
//
//请找出在 t 中被添加的字母。


#include <iostream>
#include <utility>
#include <vector>
#include <unordered_map>
#include <queue>
#include <algorithm>

using namespace std;

class Solution {
public:
    /**
     * 统计字母数量
     * @param s
     * @param t
     * @return
     */
    char findTheDifference(string s, string t) {
        auto ct1 = countCharNum(std::move(s));
        auto ct2 = countCharNum(std::move(t));
        for (int i = 0; i < 26; ++i) {
            if (ct1[i] != ct2[i])
                return char('a' + i);
        }
        return '/';
    }

    vector<int> countCharNum(string str) {
        vector<int> counter(26, 0);
        for (auto &x:str) {
            ++counter[x - 'a'];
        }
        return counter;
    }

};

class Solution2 { // 位运算
public:
    /**
     * 位运算 秒啊
     * 出现两次的被消去
     * 最后剩下只出现一次的
     * @param s
     * @param t
     * @return
     */
    char findTheDifference(string s, string t) {
        int ret = 0;
        for (char ch: s) {
            ret ^= ch;
        }
        for (char ch: t) {
            ret ^= ch;
        }
        return ret;
    }
};


int main() {
    Solution2 solution;
    cout << solution.findTheDifference("abcd", "abcde") << endl;
    return 0;
}

